using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using Credinka.Ayni.SEA.EN;
using Credinka.Ayni.SEA.AD;
using System.Transactions;
namespace Credinka.Ayni.SEA.RN
{

    public class rnUsuario : rnGeneral
    {
        adUsuario oadUsuario;
        adPerfilUsuario oadPerfilUsuario;
        enPerfilUsuario oenPerfilUsuario;

        public List<enUsuario> Listar(enUsuario poenUsuario)
        {
            List<enUsuario> loenUsuario = null;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    loenUsuario = new List<enUsuario>();
                    oadUsuario = new adUsuario(con);
                    loenUsuario = oadUsuario.fListar(poenUsuario);
                }
                catch (SqlException ex)
                {
                }
            }
            return (loenUsuario);
        }

        public List<enUsuario> ListarUsuario()
        {
            List<enUsuario> loenUsuario = null;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    loenUsuario = new List<enUsuario>();
                    oadUsuario = new adUsuario(con);
                    loenUsuario = oadUsuario.fListarUsuario();
                }
                catch (SqlException ex)
                {
                }
            }
            return (loenUsuario);
        }

        public enUsuario ObtenerUsuario(enUsuario poenUsuario)
        {
            enUsuario oenUsuario = null;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    oenUsuario = new enUsuario();
                    oadUsuario = new adUsuario(con);
                    oenUsuario = oadUsuario.fObtenerUsuario(poenUsuario);
                }
                catch (SqlException ex)
                {
                }
            }
            return (oenUsuario);
        }

        public enUsuario ObtenerUsuarioPorId(int poIdUsuario)
        {
            enUsuario oenUsuario = null;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    oenUsuario = new enUsuario();
                    oadUsuario = new adUsuario(con);
                    oenUsuario = oadUsuario.fObtenerUsuarioPorId(poIdUsuario);
                }
                catch (SqlException ex)
                {
                }
            }
            return (oenUsuario);
        }
        public int Registrar(enUsuario poenUsuario)
        {
            int N = -1;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    oadUsuario = new adUsuario(con);
                    N = oadUsuario.fRegistrar(poenUsuario);
                }
                catch (SqlException ex)
                {
                }
            }
            return (N);
        }

        public int AsociarUsuario(enUsuario poenUsuario, List<enPerfilUsuario> polPerfilUsuario)
        {
            int N = -1;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    oadUsuario = new adUsuario(con);
                    oadPerfilUsuario = new adPerfilUsuario(con);

                    using (TransactionScope trans = new TransactionScope())
                    {
                        N = oadUsuario.fRegistrar(poenUsuario);
                        if (N != -1)
                        {
                            for (int i = 0; i < polPerfilUsuario.Count; i++)
                            {
                                oenPerfilUsuario = new enPerfilUsuario();

                                oenPerfilUsuario.IdPerfil = polPerfilUsuario[i].IdPerfil;
                                oenPerfilUsuario.IdUsuario = N;
                                oenPerfilUsuario.IdCargo = polPerfilUsuario[i].IdCargo;
                                oenPerfilUsuario.CodigoTipoPerfil = polPerfilUsuario[i].CodigoTipoPerfil;
                                oenPerfilUsuario.AudNombreUsuarioCreacion = polPerfilUsuario[i].AudNombreUsuarioCreacion;
                                oenPerfilUsuario.AudIPCreacion = polPerfilUsuario[i].AudIPCreacion;
                                oenPerfilUsuario.AudMacCreacion = polPerfilUsuario[i].AudMacCreacion;
                                oadPerfilUsuario.fRegistrar(oenPerfilUsuario);
                            }
                        }                        
                    }

                }
                catch (SqlException ex)
                {
                }
            }
            return (N);
        }

        public int Modificar(enUsuario poenUsuario)
        {
            int N = -1;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    oadUsuario = new adUsuario(con);
                    N = oadUsuario.fModificar(poenUsuario);
                }
                catch (SqlException ex)
                {
                }
            }
            return (N);
        }

        public int Contar()
        {
            int totalUsuario = -1;
            using (SqlConnection con = new SqlConnection(sConexion))
            {
                try
                {
                    con.Open();
                    oadUsuario = new adUsuario(con);
                    totalUsuario = oadUsuario.fContar();
                }
                catch (SqlException ex)
                {
                }
            }
            return (totalUsuario);
        }
    }
}
